<%@ Control Language="c#" AutoEventWireup="false" Codebehind="SearchOptionsUC.ascx.cs" Inherits="Test.SearchOptionsUC" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %> <asp:Label id="Label1" runat="server" Font-Bold="True">Search which location?</ asp:Label> <asp:radiobuttonlist id="RadioButtonList1" runat="server" RepeatDirection="Horizontal"> <asp:ListItem Value="All" Selected="True">All</asp:ListItem> <asp:ListItem Value="Community">Community</asp:ListItem> </asp:radiobuttonlist> <asp:Label id="Label2" runat="server" Font-Bold="True">In which categories?</ asp:Label> <asp:checkboxlist id="CheckBoxList1" runat="server"> <asp:ListItem Value="Books" Selected="True">Books</asp:ListItem> <asp:ListItem Value="Fiction">Fiction</asp:ListItem> <asp:ListItem Value="Nonfiction">Nonfiction</asp:ListItem> <asp:ListItem Value="Stationary" Selected="True">Stationary</asp:ListItem> <asp:ListItem Value="Messages">Messages</asp:ListItem> </asp:checkboxlist>
This code simply presents the user with options for choosing location and content categories; note that names of existing content and location categories from the index have been used.
namespace Test { using System; using System.Data; using System.Drawing; using System.Web; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Collections; using System.ComponentModel; using System.Web.UI; using Keyoti.SearchEngine.Search; using Keyoti.SearchEngine.Web; public class SearchOptionsUC : System.Web.UI.UserControl { string location; string[] contents; protected System.Web.UI.WebControls.RadioButtonList RadioButtonList1; protected System.Web.UI.WebControls.Label Label1; protected System.Web.UI.WebControls.Label Label2; protected System.Web.UI.WebControls.CheckBoxList CheckBoxList1; private void Page_Load(object sender, System.EventArgs e) { //find the SearchBox control Control c = FindRecursive( Page.Controls ); //if we couldn't find one, throw exception if( c==null ) throw new Exception("A SearchBox Control "+ "could not be found on the Form, please add one."); else { //if SearchBox found, set its SearchOptions //accordingly with the location/content from //the controls location = RadioButtonList1.SelectedItem.ToString(); //need to pass an array of strings to SearchBox //for the content options. //So find selected contents and convert to an array ArrayList temporary = new ArrayList(); foreach( ListItem item in CheckBoxList1.Items) if( item.Selected ) temporary.Add(item.Value); contents = (string[]) temporary.ToArray(typeof (System.String)); //finally set SearchOption property in SearchBox ((SearchBox)c).SearchOptions = new SearchOptions(location, contents); } } /// <summary> /// Finds a SearchBox control in controlsToFindIn /// </summary> Control FindRecursive(ControlCollection controlsToFindIn) { Control found = null; foreach(Control crt in controlsToFindIn) { if (found==null) { if(crt is Keyoti.SearchEngine.Web.SearchBox) found = crt; else found = FindRecursive(crt.Controls); } } return found; } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN: This call is required by the ASP.NET Web Form Designer. // InitializeComponent(); base.OnInit(e); } /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion } }
The Page_Load method of the User Control is where the required action is performed; The SearchBox.SearchOptions property is set with the exact names of content and location categories as specified in the index.